
*EXPERIMENTAL RESULTS AND ROBUSTNESS CHECKS

use "replication_experiment.dta", clear

*Table 2: Choice of incumbent, opposition or minor party
eststo clear
eststo: mlogit party_choice learn_time_bad foodshort school_improve if sample==1 & party_choice!=0, baseoutcome(2) cluster(enum_code)
eststo: mlogit party_choice learn_rel_bad if sample==1 & party_choice!=0, baseoutcome(2) cluster(enum_code)
esttab, se legend replace unstack  star(+ .1 * .05 ** 0.01) drop(2: foodshort school_improve _cons)

*Table A2: Covariate balance across treatment conditions
eststo clear
eststo: logit learn_time_bad educ age female urban underemp foodshort school_improve school_better 
eststo: logit learn_rel_bad educ age female urban underemp foodshort school_improve school_better 
esttab, se b(3) star(+ .1 * .05 ** 0.01)

*Table A3: Inclusion of non-response as choice in multinomial logit
eststo clear
eststo: mlogit party_choice learn_time_bad foodshort school_improve if sample==1, baseoutcome(2) cluster(enum_code)
eststo: mlogit party_choice learn_rel_bad if sample==1, baseoutcome(2) cluster(enum_code)
esttab, se legend replace unstack drop(2: foodshort school_improve _cons) star(+ .1 * .05 ** 0.01)

*Table A4: robustness to alternative clustering
eststo clear
eststo: mlogit party_choice learn_time_bad foodshort school_improve if sample==1 & party_choice!=0, baseoutcome(2) 
eststo: mlogit party_choice learn_time_bad foodshort school_improve if sample==1 & party_choice!=0, baseoutcome(2) cluster(site_match)
eststo: mlogit party_choice learn_time_bad foodshort school_improve if sample==1 & party_choice!=0, baseoutcome(2) cluster(site)
eststo: mlogit party_choice learn_rel_bad if sample==1 & party_choice!=0, baseoutcome(2) 
eststo: mlogit party_choice learn_rel_bad if sample==1 & party_choice!=0, baseoutcome(2) cluster(site_match)
eststo: mlogit party_choice learn_rel_bad if sample==1 & party_choice!=0, baseoutcome(2) cluster(site)
esttab, se legend replace unstack  star(+ .1 * .05 ** 0.01) drop(2: foodshort school_improve _cons)

*Table A5: Results among subjects treated with positive cues
eststo clear
eststo: mlogit party_choice learn_time_good educ if party_choice>0 & school_better<2, baseoutcome(2) cluster(enum_code)
eststo: mlogit party_choice learn_rel_good media if party_choice>0 & school_improve<2, baseoutcome(2) cluster(enum_code)
esttab, se legend replace unstack drop(2: educ media _cons) star(+ .1 * .05 ** 0.01)

*Table A6: Choice estimated with separate logits
eststo clear
eststo: logit nrm_pres learn_time_bad foodshort school_improve if sample==1 & party_choice!=0,cluster(enum_code)
eststo: logit dp_pres learn_time_bad foodshort school_improve if sample==1 & party_choice!=1 & party_choice!=0,cluster(enum_code)
eststo: logit nrm_pres learn_rel_bad if sample==1 & party_choice!=0, cluster(enum_code)
eststo: logit dp_pres learn_rel_bad if sample==1 & party_choice!=1 & party_choice!=0, cluster(enum_code)
esttab, se legend replace drop(foodshort school_improve _cons) star(+ .1 * .05 ** 0.01)

*Table A7: Ethnic preference by treatment assignment

use "Replication_ethnic preference"

ttest pred_support if school_better>1 & school_better!=. & treat_two==0, by(coeth_pred)
ttest pred_support if school_better>1 & school_better!=. & treat_two==1, by(coeth_pred)
ttest pred_support if school_better==1 & treat_two==1, by(coeth_pred)
ttest pred_support if school_better==1 & treat_two==0, by(coeth_pred)

*AFROBAROMETER RESULTS AND ROBUSTNESS CHECKS
	
*Table 3: Party choice in full Afrobarometer sample	
use "replication_afrobarometer.dta", clear
eststo clear
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1), mlogit
esttab, se b(3) unstack star(+ 0.10 * 0.05 ** 0.01 *** 0.001) noomitted replace drop(M1[site] ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem_2012 elf gdppc runoff survsus _cons)

*Table 4: Sincere voting

eststo clear
xtset site
eststo: xtlogit minor_sincere c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian ==1
esttab, se b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) replace drop(ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem_2012 elf gdppc runoff survsus)

*Table A1: schools predict attitudes toward incumbent
eststo clear
xtset site
eststo:xtreg q65h schools_prob age urban female if country==18
eststo:xtreg q65h school_ex school_bo school_teach school_ab school_faci age urban female if country==18
eststo:xtreg pres_performance schools_prob age urban female if country==18
eststo:xtreg pres_performance school_ex school_bo school_teach school_ab school_faci age urban female if country==18
eststo:xtreg incumbentvote schools_prob age urban female if country==18
eststo:xtreg incumbentvote school_ex school_bo school_teach school_ab school_faci age urban female if country==18
esttab, se b(3) legend replace drop(age urban female)

*Table A8: Face validity for programmatic goods residual

eststo clear
eststo: xtreg pres_perf trust_inc ethnic_unfair q56b corrupt_pres, fe 
esttab, b(3) se legend replace

*Table A9: Afrobarometer results with different calculation of residual

eststo clear
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid3##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons elf gdppc runoff survsus libdem if majoritarian==1), mlogit
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid4##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons elf gdppc runoff survsus libdem if majoritarian==1), mlogit
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid5##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus libdem if majoritarian==1), mlogit
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid_site##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons elf gdppc runoff survsus libdem if majoritarian==1), mlogit
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.pres_perf##c.inc_margin coethnic copart pastpersonecon q4 ethnic_unfair nationalid flivedpov education urban female age employed govspons elf gdppc runoff survsus q61f libdem if majoritarian==1), mlogit
esttab, se b(3) unstack star(+ 0.10 * 0.05 ** 0.01 *** 0.001) noomitted replace drop(1.party_choice: M1[site] ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem_2012 survsus _cons)

*Table A10: Results under alternate codings of minor parties

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>ethnic_share & party_share<0.10
replace party_choice = 2 if party_choice == 0 & party_share>0.10
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons oneparty_dom libdem elf gdppc runoff survsus if majoritarian==1), mlogit

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>0.5 & party_share<0.20
replace party_choice = 2 if party_choice == 0 & party_share>0.20
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons  libdem elf gdppc runoff survsus if majoritarian==1), mlogit

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>0.5 & party_share<0.20
replace party_choice = 2 if party_choice == 0 & party_share>0.20
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons  libdem elf gdppc runoff survsus if majoritarian==1), mlogit

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>.5 & party_share<0.10
replace party_choice = 2 if party_choice == 0 & party_share>0.10
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons  libdem elf gdppc runoff survsus if majoritarian==1), mlogit

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>ethnic_share & party_share<0.20
replace party_choice = 2 if party_choice == 0 & party_share>0.20
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1), mlogit
 
replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>0.5 & party_share<0.10
replace party_choice = 2 if party_choice == 0 & party_share>0.20
replace party_choice = . if party_choice==0
eststo: gsem(1.party_choice 3.party_choice<- M1[site] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1), mlogit

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>ethnic_share & party_share<0.15
replace party_choice = 2 if party_choice == 0 & party_share>0.15
replace party_choice = . if party_choice==0

esttab, keep(prog_resid2 c.prog_resid2#c.inc_margin)

*return to original coding before continuing do-file

replace party_choice = 0
replace party_choice = 1 if incumbentvote==1
replace party_choice = 3 if ethnic == party_ethnic_mode & share_mode>ethnic_share & party_share<0.15
replace party_choice = 2 if party_choice == 0 & party_share>0.15
replace party_choice = . if party_choice==0

*Table A11: Afrobarometer results under different clustering
eststo clear

eststo: gsem(1.party_choice 3.party_choice<- M1[country] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1), mlogit
eststo: xi: gsem(1.party_choice 3.party_choice<- M1[site>country] c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1), mlogit
eststo: mlogit party_choice c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1, vce(cluster site) baseoutcome(2)
eststo: mlogit party_choice c.prog_resid2##c.inc_margin ethnic_unfair nationalid flivedpov education urban female age employed govspons libdem elf gdppc runoff survsus if majoritarian==1, vce(cluster country) baseoutcome(2)
esttab, se b(3) unstack star(+ 0.10 * 0.05 ** 0.01 *** 0.001) noomitted replace drop(1.party_choice: 1:) keep(prog_resid2 inc_margin c.prog_resid2#c.inc_margin)
